package com.smart.speaker.websocket.chat;

import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationOutput;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.ResponseFormat;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.tools.ToolCallBase;
import com.fasterxml.jackson.databind.JsonNode;
import com.github.promeg.pinyinhelper.Pinyin;
import com.smart.speaker.config.ModelConfig;
import com.smart.speaker.util.JsonUtils;
import com.smart.speaker.util.StrUtils;
import com.smart.speaker.util.ToolUtils;
import com.smart.speaker.websocket.ChatHandler;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors;

@Slf4j
public class GameWord extends Chat {

    private static final String WORDS = """
春天 寻找 姑娘 野花 柳枝 桃花 杏花 鲜花 邮递员 先生 原来 大叔 邮局 太太 做客 惊奇 快活 美好 礼物 爷爷 植树 碧空如洗 万里无云 公园 格外 引人注目 汗珠 休息 树苗 小心 笔直 叔叔 足迹 昨天 迷路 温暖 爱心 也许 桌子 平时 难道 味道 就是 加工 种子 农具 甜菜 工具 劳动 经过 出色 妹妹 河水 碧绿 波纹 河岸 柳叶 景色 恋恋不舍 柳树 枝条 神州 中华 山川 黄河 长江 长城 台湾岛 海峡 民族 奋发 节日 春节 花灯 清明节 先人 龙舟 中秋 转眼 团圆 热闹 动物 贝壳 甲骨文 张开 样子 可以 钱币 钱财 有关 比如 美食 红烧 茄子 烤鸭 羊肉 蛋炒饭 彩色 脚尖 森林 雪松 歌声 苹果 精灵 季节 好像 一直 说话 童话 对岸 发现 弟弟 游戏 发明 字母 周围 补充 公主 飞机 地道 火药 合力 胜利 忘记 屁股 苍耳 留神 干净 从来 幸运 使劲 夜晚 听见 草地 亡羊补牢 劝告 禾苗 筋疲力尽 明白 图画 老师 讲桌 座位 教室 哈哈大笑 五角星 然后 画纸 神情 角度 愿意 麦子 为难 四周 伯伯 立刻 突然 吃惊 认真 脚步 难为情 雷雨 乌云 闪电 雷声 房子 窗户 清新 迎面 野外 大自然 天然 指南针 帮助 方向 向导 指点 北极星 永远 黑夜 帮忙 特别 积雪 太空 生活 别处 主要 方便 活动 杯子 喝水 使用 洗澡 容易 浴桶 耳朵 扇子 遇到 兔子 毛病 后来 不安 头痛 最后 人家 决定 商店 工夫 终于 围巾 星期 青蛙 草籽 野鸭 泉水 竹子 应该 花丛 尽情 道路 毛虫 叶子 目光 周游 纺织 编织 怎样 声音 花纹 消失 祖先 原始 意思 浓绿 一望无边 蓝天 野果 野兔 赛跑 回忆 世界 学习 成功 月亮 主意 反反复复 变化 方式 简单 自由 生长 相当 结局 开头 光明 觉得 值日 人类 艰难 决心 苦海 炎热 害怕 从此 花草树木 生机 早晨 穿戴 鲜艳 服装 打扮 敬爱 国旗 敬礼 安静 树枝 好奇 孔雀 招引 粗壮 枝干 影子 阵雨 荒野 跳舞 狂欢 功课 放假 互相 狂风 急急忙忙 自然 能够 双臂 水泥 放晴 明朗 亮晶晶 金黄 雨珠 院墙 落叶 闪闪发光 尽头 平展 排列 规则 歌唱 迟到 清凉 留意 颜料 枫叶 邮票 果树 菊花 仙子 气味 香甜 香味 加紧 过冬 丰收 火柴 围裙 可怜 哪怕 暖和 火焰 蜡烛 亮光 忽然 地板 烛光 温和 赶紧 痛苦 清晨 旅行 要好 咱们 草堆 作声 偷偷 答应 做梦 来得及 救命 拼命 大吃一惊 消化 当然 几乎 知觉 光亮 眼泪 变成 门板 准备 暴风雨 安心 睡觉 主人 墙壁 母鸡 注意 根本 蜘蛛 漂亮 因此 母亲 外祖父 雨点 船夫 用力 船头 羽毛 翠绿 静悄悄 翠鸟 捕鱼 窗前 蒲公英 盛开 玩耍 一本正经 绒毛 假装 哈欠 钓鱼 观察 合拢 有趣 喜爱 位于 部分 风景 优美 物产 丰富 相互 交错 成群结队 游动 堆积 宝贵 肥料 祖国 事业 发展 海滨 街道 交界 来来往往 渔民 遍地 远处 汽笛 船队 满载 银光闪闪 靠岸 初夏 散发 除了 整洁 东北 脑袋 严严实实 挡住 视线 花坛 显得 苍翠 飞舞 名贵 药材 雪花 巨大 宝库 美妙 音乐家 演奏 感受 激动 合奏 乐曲 充满 乐器 雨滴 滴答 所有 河流 轻快 告诉 高远 沉思 麻雀 蚂蚁 搬家 井然 精神 趣味 鲜美 如同 温柔 倒映 倒影 画册 无穷 无尽 乐趣 父亲 童年 雾蒙蒙 轻声 生怕 惊动 气息 总是 抖动 露水 呼吸 时刻 猎人 翅膀 沉重 掌声 文静 默默 离开 轮流 讲台 一齐 角落 慢吞吞 刚刚 热烈 持久 泪水 平息 动听 勇气 面对 郊外 养病 跳动 欢快 谷粒 男孩 或者 严寒 本来 可惜 肯定 诚实 乌黑 活泼 春日 轻风 吹拂 洒落 赶集 聚拢 形成 加入 春光 湖面 偶尔 闲散 纤细 荷花 清香 圆盘 花瓣 莲蓬 花骨朵儿 破裂 姿势 眼前 本领 仿佛 随风 飘动 舞蹈 停止 国王 骄傲 傲慢 谦虚 懦弱 神气 住嘴 相提并论 王朝 尘土 光洁 美观 古代 价值 动手 池塘 痛快 倒映 倒影 欣赏 匀称 精美 别致 没精打采 机灵 哎呀 狮子 机会 叹气 造纸术 伟大 记录 保存 大约 吸收 经验 原料 满足 朝鲜 半岛 日本 阿拉伯 欧洲 社会 赵州桥 石匠 设计 创举 冲击 节省 不但 而且 各自 似乎 体现 人民 智慧 才干 历史 争奇斗艳 芬芳 迷人 艳丽 睡莲 醒来 万寿菊 欣然 苏醒 含笑 展示 昆虫 修建 组成 蜜蜂 辨认 能力 阻力 将近 包括 检查 迷失 准确 无误 尽管 沿途 陌生 确实 记忆 本能 星空 流淌 秘密 楼梯 相遇 铃声 万物 乘法 思绪 形状 狐狸 担心 丁零 失望 背包 巧克力 香肠 面包 花生 牛奶 继续 饭菜 排骨 抬头 麻烦 水墨画 垂柳 钓竿 扑腾 扇动 戏耍 拨动 浪花 葫芦 松树 清爽 松针 蘑菇 大师 表弟 胆小 中药 姑父 理发 欢迎 仇人 摆布 双倍 过年 央求 虽然 天分 电灯泡 肥皂泡 种类 其中 网球 透明 分裂 形式 圆满 轻悠悠 飞越 婴儿 目送 希望 奇妙 呈现 变幻 群星 奇迹 诱人 圆润 感叹 光芒 冰柱 锋利 刀剑 普通 模型 存在 无穷 海底 宁静 器官 行进 危险 海参 攻击 反推力 迅速 后退 轮船 长途 地球 生物 石油 天然气 火烧云 晚饭 胡子 金灿灿 凶猛 接着 威武 镇静 性子 布料 交货 笑话 大方 夸奖 道理 实在 提前 服务 衬衫 负责 名声 手艺 感动 里屋 莫非 厉害 发抖 松手 跟前 甘心 奇观 农历 据说 宽阔 人山人海 滚动 顿时 逐渐 犹如 齐头并进 山崩地裂 霎时 余波 依旧 柔和 鹅卵石 河床 新鲜 修补 坑坑洼洼 庄稼 风俗 葡萄 满意 水稻 成熟 招待 传说 豌豆 按照 暖洋洋 舒适 黑暗 恐怕 僵硬 丰满 等待 虚弱 耐心 温和 暖和 愉快 兴奋 曾经 蚊子 即使 灵巧 科学家 横七竖八 绳子 苍蝇 证明 研究 雷达 显示 驾驶员 呼风唤雨 世纪 技术 改变 程度 超过 腾云驾雾 幻想 原子核 奥秘 日益 联系 物质 哲学 任何 创造 改善 爬山虎 操场 嫩红 舒服 均匀 重叠 空隙 叶柄 反面 触角 弯曲 细小 痕迹 瞧不起 牢固 休想 住宅 临时 功夫 随遇而安 慎重 选择 住址 优良 洞穴 大厅 卧室 专家 平整 清洁 卫生 疲劳 睁眼 黑乎乎 翻身 斧头 缓缓 上升 下降 精疲力竭 血液 奔流不息 汗毛 茂盛 滋润 雨露 人间 悲惨 情景 危害 猛兽 严厉 敬佩 悄悄 坚定 违抗 狠心 尖利 著名 愤愤不平 获得 打猎 猛烈 无可奈何 拍打 嘴角 分明 牙齿 绝望 尖叫 身躯 掩护 幼儿 搏斗 庞大 安然 强大 力量 假日 抬头 云彩 石级 发颤 年纪 奋力 猴子 鲫鱼 纪念 辫子 笑呵呵 鼓舞 居然 甚至 顽皮 故意 脖子 扑打 忙乱 大概 助威 昏乱 结实 汉子 可笑 无缘无故 平白 文艺 表演 角色 期待 排练 危机 通情达理 充分 自信 提示 撤换 紧张 哄堂大笑 砸锅 至今 冰天雪地 否则 旋转 重整旗鼓 况且 得心应手 椅子 仍然 尤其 手舞足蹈 恨不得 预料 摇头晃脑 不动声色 顽强 溃败 自豪 严肃 清晰 抱负 胸怀 赞叹 表情 忘怀 果真 非凡 左顾右盼 指望 训斥 体会 分量 响亮 管理 人烟 媳妇 新娘 眼睁睁 干旱 迎接 徒弟 面如土色 求饶 灌溉 收成 屋檐 构成 装饰 顺序 华丽 独特 照例 率领 踏步 倘若 和谐 催眠曲 甜蜜 梦乡 慰藉 扫荡 威力 锐利 河滩 帐子 闪烁 奇幻 蝙蝠 霸气 猫头鹰 复杂 怒吼 松脂 拂拭 灰尘 美餐 晌午 热辣辣 淹没 挣扎 成千上万 冲刷 断绝 推测 详细 情形 恐龙 笨重 迟钝 鸽子 根据 末期 描绘 隧道 形态 膨大 前肢 具备 开辟 脱离 纳米 无能为力 拥有 冰箱 功能 蔬菜 材料 钢铁 隐形 健康 细胞 疾病 预防 病灶 需要 深刻 繁星 藤萝 波涛 墨绿 嫩绿 集中 交叉 教练 指挥 整齐 节拍 白桦 毛茸茸 潇洒 朦胧 寂静 朝霞 呼唤 响动 尽职 屏息 稿纸 梅花 解闷 勇猛 满月 淘气 讨厌 理由 心事 反抗 忠厚 毒手 成绩 警戒 预备 汤圆 即将 姿态 高傲 狂吠 局促 京剧 一丝不苟 譬如 侍候 饭馆 附近 脾气 敏捷 空空如也 昂首 供养 清静 扩大 范围 努力 刹那 夺目 分辨 灿烂 不仅 杜鹃 气势 聚集 拥挤 心情 脚跟 移动 昏暗 挤压 额角 登陆 宽广 石钟乳 石笋 观赏 芦花 发愣 铅笔 枪栓 胳膊 劫难 鬼脸 戒指 绸子 敌人 尸首 防备 慌忙 行驶 凌晨 窟窿 混乱 维持 秩序 岗位 主宰 调遣 践行 介绍 声明 妖怪 规矩 劈面 幸福 向日葵 柔嫩 丰硕 允许 禁止 踪迹 呼啸 始终 吼叫 自私 举动 脸颊 凶狠 拆除 精巧 配合 身段 适宜 白鹤 生硬 寻常 忘却 镜匣 清晨 孤独 悠然 黄昏 恩惠 美中不足 播种 浇水 吩咐 榨油 爱慕 体面 深夜 桂花 懂得 糕饼 茶叶 汛期 山洪 暴发 间隔 唯独 懒惰 平稳 保持 平衡 协调 美感 示意 家常 假如 理所当然 联结 无价之宝 召集 大臣 商议 解决 完好无缺 称赞 商量 允诺 典礼 得罪 胆怯 示弱 拒绝 职位 同心协力 猎豹 冠军 陆地 俯冲 高速公路 搭乘 火箭 发动机 手电筒 赤道 难以置信 侵略 修筑 粉碎 领导 不计其数 打击 坚持 游击 妨碍 隐蔽 陷坑 拐弯 迷惑 无穷无尽 猎物 酬谢 珍宝 感激 叮嘱 复活 议论 崩塌 搬家 焦急 发誓 千真万确 谎话 迟延 镇定 后悔 悲痛 震天动地 嫂子 剩饭 床铺 亲密 笑嘻嘻 成家立业 好歹 稀罕 妻子 晚霞 一辈子 结婚 相依为命 毁灭 不可估量 举世闻名 众星拱月 金碧辉煌 殿堂 亭台楼阁 象征 仿照 诗情画意 建筑 漫游 天南海北 饱览 风景名胜 境界 宏伟 奇珍异宝 博物馆 统统 搬运 销毁 罪证 奉命 寸草不生 摄氏度 繁殖 粮食 煤炭 飘浮 地区 杀菌 治疗 松鼠 乖巧 清秀 玲珑 歇凉 追逐 警觉 触动 光滑 狭窄 勉强 脱落 梳理 连续 广播 铁路 辞退 挣钱 压抑 潮湿 忙碌 阴暗 酷暑 炎夏 噪声 瘦弱 脊背 口罩 龟裂 忍心 机械 数落 权利 渔船 报考 教训 心疼 席子 庙会 彩排 糖果 抽象 启迪 毕业 寄宿 师范 路费 轮换 领略 意境 磨灭 精致 黎明 红晕 漆黑 萤火虫 大雁 夜幕 降临 心旷神怡 炭火 火盆 走廊 闲逸 未免 陆续 白茫茫 榕树 纠正 不可计数 照耀 涨潮 树梢 应接不暇 画眉 舅父 津津有味 英雄 无限 一知半解 述说 厌烦 荒唐 辛酸 访问 书刊 烦琐 真情实感 质朴 刊物 蝴蝶 蜻蜓 蚂蚱 圆滚滚 明晃晃 樱桃 瞎闹 锄头 承认 随意 妒忌 委托 照办 预计 紧急 军令状 探听 私自 布置 调度 呐喊 神机妙算 半夜三更 寻思 耻笑 胸膛 武艺 拟定 参谋 损失 锻炼 情不自禁 慰问 眷恋 奔赴 繁忙 特殊 尊重 签字 下意识 诊所 年龄 熟练 惊疑 审视 一针见血 施行 清醒 颤抖 一声不吭 崭新 由衷 苍白 慈祥 肃然起敬 荣幸 摔跤 手疾眼快 欺负 脚腕子 挺脱 肢体 格局 威严 无疑 侄子 喉咙 粉刷 师傅 绝活 半信半疑 派头 包袱 手法 鼓点 衔接 屏障 芝麻 神圣 侵犯 露馅儿 轰然 难堪 发怔 赏识 脚力 胸有成竹 摩拳擦掌 跃跃欲试 兴致勃勃 出谋划策 引荐 航行 风平浪静 取乐 放肆 桅杆 哭笑不得 眼巴巴 吓唬 船舱 海鸥 瞄准 心惊胆战 纵横 船艄 垫子 窗帘 操纵 手忙脚乱 保姆 簇拥 沉寂 停泊 码头 笼罩 仪态 端庄 远眺 骏马 遮掩 阻挡 飞驰 辽阔 赞许 板凳 吆喝 铃铛 恢复 沉睡 牲畜 灯塔 拇指 接触 纽扣 相貌 养尊处优 渺小 享乐 附庸 团结 绿毯 线条 柔美 惊叹 回味 乐趣 目的地 洒脱 衣裳 彩虹 马蹄 热乎乎 礼貌 拘束 举杯 感人 会心 微笑 宅院 幽雅 伏案 浑浊 笨拙 眼帘 参差 单薄 文思 梦想 迷蒙 模糊 花蕾 衣襟 恍然 愁怨 顺心 平淡 日寇 奋战 险要 手榴弹 全神贯注 悬崖 斩钉截铁 热血沸腾 攀登 居高临下 山涧 粉身碎骨 雹子 屹立 眺望 喜悦 壮烈 豪迈 不屈 惊天动地 政府 外宾 汇集 预定 爆发 排山倒海 就位 宣告 雄伟 肃静 旗帜 语调 完毕 检阅 制服 坦克 一致 距离 次序 威风凛凛 疙瘩 疲倦 呆头呆脑 冰棍 别出心裁 技高一筹 橡皮 跺脚 大步流星 颓然 暴露无遗 沮丧 抽屉 念念有词 忘乎所以 心满意足 发达 理论 类似 猜测 起源 适当 氧气 提供 能源 昼夜 神秘 观测 拍摄 斑点 枯萎 干燥 沙漠 磁场 抵御 因素 考察 培养 咆哮 惊慌 嗓子 跌跌撞撞 拥戴 沙哑 党员 呻吟 废话 吞没 猛然 渔夫 汹涌澎湃 风暴 轰鸣 心惊肉跳 沉思 抱怨 倾听 探望 照顾 困难 阴冷 自作自受 湿淋淋 渔网 糟糕 忧虑 后脑勺 活生生 苔藓 草坪 甘蔗 瀑布 增加 缝隙 软绵绵 谚语 农作物 尽量 斗篷 情况 袖子 瓦蓝 衣柜 预报 喧闹 遮盖 讲座 酱油 逗引 嘴唇 楼梯 晶莹 摇篮 壮观 和蔼 资源 有限 矿产 无私 慷慨 节制 枯竭 贡献 毁坏 滥用 生态 设想 例如 基地 目睹 子孙 谱写 钢琴 幽静 断断续续 茅屋 烛光 失明 纯熟 清幽 琴键 景象 陶醉 一望无际 家景 郑重 供品 祭器 讲究 盼望 厨房 毡帽 项圈 刺猬 伶俐 经历 潮汛 预告 烟雾 昏沉 错综 澄碧 荡漾 解散 退缩 瘦削 浮动 瞬间 凝视 骤然 凌乱 陡然 热情 自傲 饺子 万象更新 鞭炮 眨眼通宵 间断 万不得已 截然 燃放 小贩 摆摊儿 彼此 贺年 骆驼 恰好 一律 彩绘 分外 腊八粥 感觉 沸腾 何况 搅和 资格 可靠 罢了 要不然 猜想 肿胀 惊异 粉碎 总之 染缸 解释 浪漫 奈何 流落 凄凉 寂寞 恐惧 倒霉 忧伤 书籍 处境 理智 控制 心平气和 抛弃 重见天日 防御 侵袭 倾覆 宽慰 深重 困境 焉知非福 确乎 空虚 不禁 挪移 觉察 叹息 徘徊 微风 何曾 游丝 赤裸裸 明媚 拨弄 草丛 画报 翻箱倒柜 念叨 停顿 晃动 耽搁 沉郁 漫长 休止 时光 惊惶 亲吻 依偎 挽回 荒凉 埋头 幼稚 含糊 避免 局势 严峻 轻易 尖锐 僻静 魔鬼 苦刑 冷笑 残暴 匪徒 法庭 安定 占据 会意 执行 过度 革命 解放 彻底 利益 意义 剥削 压迫 批评 兴旺 五湖四海 目标 责任 牺牲 死得其所 制度 寄托 哀思 真理 领域 建树 司空见惯 疑问 敏感 提取 明显 无独有偶 无聊 不可思议 吻合 偶然 文献 证据 系统 整理 见微知著 灵感 机遇 机器 钟楼 洪亮 街心 盲人 坚硬 清脆 单调 请求 加速 齿轮 玻璃 唯恐 丑恶 恐怖 证实 蟋蟀
""";
    private static final List<String> wordList;

    static {
        wordList = Arrays.stream(WORDS.split(" ")).collect(Collectors.toList());
    }

    private final Generation generation;
    private final ChatHandler chatHandler;

    public GameWord(Generation generation, ChatHandler chatHandler) {
        this.generation = generation;
        this.chatHandler = chatHandler;
    }

    private String prevWord;

    @Override
    public void chat(String req) {
        try {
            req = StrUtils.replaceEndpoint(req);
            if (StrUtils.isEmpty(req) || req.length() < 2) {
                chatHandler.synthesizer("我没有听清您说什么哦，请再说一次。");
                return;
            }
            String res = checkWord(req);
            JsonNode jsonNode = JsonUtils.parseJsonToJsonNode(res);
            if (!jsonNode.path("res").asBoolean()) {
                chatHandler.synthesizer("'" + req + "'不是一个词语哦。");
                return;
            }
            char prevChar = prevWord.charAt(prevWord.length() - 1);
            String pinPrev = Pinyin.toPinyin(prevChar);
            String pinCurr = Pinyin.toPinyin(req.charAt(0));
            if (!pinPrev.equals(pinCurr)) {
                String newWord = modelCall(prevChar);
                chatHandler.synthesizer("您需要使用 " + prevChar + " 开头来生成词语。例如，可以使用 " + newWord + "。");
                return;
            }
            char currChar = req.charAt(req.length() - 1);
            String newWord = modelCall(currChar);
            if (newWord == null) {
                return;
            }
            prevWord = newWord;
            chatHandler.synthesizer("那我的下一个词是'" + newWord + "'。");
        } catch (Exception e) {
            log.error("词语接龙报错", e);
        }
    }

    @Override
    public void secondChat() {
        prevWord = getWord();
        chatHandler.synthesizer("好的，让我们开始词语接龙吧，第一个词是'" + prevWord + "'。");
    }

    private String checkWord(String req) throws NoApiKeyException, InputRequiredException {
        var systemMsg = Message.builder()
                .role(Role.SYSTEM.getValue())
                .content("""
                        你是一个中文词语专家。负责判断用户输入的词语是否是一个真的中文词语，而不是编造出来的。
                        如果是真的词语返回：{"res": true}，
                        否则返回：{"res": false}
                        """)
                .build();
        var param = GenerationParam.builder()
                .apiKey(ModelConfig.Key.apiKey)
                .model(ModelConfig.Key.model)
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .responseFormat(ResponseFormat.from(ResponseFormat.JSON_OBJECT))
                .tools(ToolUtils.getGameToolList())
                .messages(List.of(systemMsg, Message.builder().role(Role.USER.getValue()).content(req).build()))
                .build();
        GenerationResult call = generation.call(param);
        StringBuilder content = new StringBuilder();
        List<ToolCallBase> tools = new ArrayList<>();
        for (GenerationOutput.Choice choice : call.getOutput().getChoices()) {
            if (choice.getMessage().getToolCalls() != null) {
                tools.addAll(choice.getMessage().getToolCalls());
            } else if (StrUtils.isNotEmpty(choice.getMessage().getContent())){
                content.append(choice.getMessage().getContent());
            }
        }
        if (!tools.isEmpty()) {
            chatHandler.executeTool(tools);
            return null;
        }
        return content.toString();
    }

    private String modelCall(char currChar) throws NoApiKeyException, InputRequiredException {
        var systemMsg = Message.builder()
                .role(Role.SYSTEM.getValue())
                .content("你是一个中文词语专家。")
                .build();
        String msg = String.format("使用'%s'开头生成一个词语，不能出现生僻字，只返回一个词语，不要生成其它内容", currChar);
        var param = GenerationParam.builder()
                .apiKey(ModelConfig.Key.apiKey)
                .model(ModelConfig.Key.model)
                .messages(List.of(systemMsg, Message.builder().role(Role.USER.getValue()).content(msg).build()))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .build();
        GenerationResult call = generation.call(param);
        return checkWord(call.getOutput().getChoices().getFirst().getMessage().getContent());
    }

    private String getWord() {
        return wordList.get(ThreadLocalRandom.current().nextInt(wordList.size()));
    }
}
